[INFO] cloning repository https://github.com/Studio-Sasquatch/ralph
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Studio-Sasquatch/ralph" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 0f6214be6aabd1b993fa8872f0b9876470098e71
[INFO] testing Studio-Sasquatch/ralph against try#0abe69e6c16114311cc2700e972492e64d69c28f for pr-154065
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Studio-Sasquatch/ralph
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking git repo https://github.com/Studio-Sasquatch/ralph
[INFO] tweaked toml for git repo https://github.com/Studio-Sasquatch/ralph written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Studio-Sasquatch/ralph on toolchain 0abe69e6c16114311cc2700e972492e64d69c28f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Studio-Sasquatch/ralph already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be
[INFO] running `Command { std: "docker" "start" "-a" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }`
[INFO] [stdout] f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829
[INFO] running `Command { std: "docker" "start" "-a" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling ref-cast v1.0.25
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling ref-cast-impl v1.0.25
[INFO] [stderr]    Compiling serde_derive_internals v0.29.1
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling event-listener v5.4.1
[INFO] [stderr]    Compiling instability v0.3.11
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling event-listener-strategy v0.5.4
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling schemars_derive v1.2.1
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling compact_str v0.8.1
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling async-broadcast v0.7.2
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling unicode-width v0.2.0
[INFO] [stderr]    Compiling colored v2.2.0
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling ratatui v0.29.0
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling schemars v1.2.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling agent-client-protocol-schema v0.10.8
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling agent-client-protocol v0.9.4
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling ralph v0.8.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 55.82s
[INFO] running `Command { std: "docker" "inspect" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }`
[INFO] [stdout] 4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f
[INFO] running `Command { std: "docker" "start" "-a" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }`
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling ralph v0.8.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 22.17s
[INFO] running `Command { std: "docker" "inspect" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }`
[INFO] [stdout] 5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0
[INFO] running `Command { std: "docker" "start" "-a" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ralph-a15548a3c0d7530a)
[INFO] [stdout] 
[INFO] [stdout] running 522 tests
[INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_permits_listed_file ... ok
[INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_rejects_unlisted_file ... ok
[INFO] [stdout] test acp::client_impl::tests::test_no_write_path_restriction_allows_any ... ok
[INFO] [stdout] test acp::client_impl::tests::test_kill_terminal ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_nonexistent ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_with_line_limit ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_approves_reads ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_basic ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_basic ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_auth_expired ... ok
[INFO] [stdout] test acp::client_impl::tests::test_take_accumulated_text ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_authentication_required ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_not_authenticated ... ok
[INFO] [stdout] test acp::client_impl::tests::test_take_files_modified ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_read_only_rejected ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_nested_relative ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_parent_traversal_rejected ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_modified ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_denies_writes ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_outside_project_rejected ... ok
[INFO] [stdout] test acp::connection::tests::test_no_model_override_uses_default ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_creates_parents ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_generic_failure ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_unrelated_errors ... ok
[INFO] [stdout] test acp::connection::tests::test_autonomous_prompt_concatenation ... ok
[INFO] [stdout] test acp::client_impl::tests::test_terminal_not_found_returns_error ... ok
[INFO] [stdout] test acp::connection::tests::test_model_override_takes_precedence ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_double_quoted_args ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_outside_project_rejected ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_simple_command ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_quoted_args ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_cancelled_maps_to_interrupted ... ok
[INFO] [stdout] test acp::connection::tests::test_ralph_model_env_var_key ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_end_turn_is_completed ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_max_tokens_is_not_end_turn ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_refusal_is_not_end_turn ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_malformed_command_returns_error ... ok
[INFO] [stdout] test acp::interactive::tests::test_run_streaming_is_async ... ok
[INFO] [stdout] test acp::interactive::tests::test_poll_interrupt_is_async ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_args ... ok
[INFO] [stdout] test acp::interactive::tests::test_run_interactive_is_async ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_empty_command_returns_error ... ok
[INFO] [stdout] test acp::interactive::tests::test_first_prompt_concatenation ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_all_three_model_names ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_sonnet_example ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_completion_sigils ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_haiku_example ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_opus_example ... ok
[INFO] [stdout] test acp::interactive::tests::test_multiline_result_variants_exist ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_tag ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_one_task_per_loop ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_no_blockers_omits_prerequisites_section ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_task_sigils ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_no_parent_omits_parent_section ... ok
[INFO] [stdout] test acp::prompt::tests::test_iteration_context_fields_no_skills_summary ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_with_two_blockers ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_no_progress_file_references ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_journal ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_verbatim_fields ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_journal_when_empty ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_knowledge ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_learning_section ... ok
[INFO] [stdout] test acp::sigils::tests::both_task_sigils_task_done_wins ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_knowledge_when_empty ... ok
[INFO] [stdout] test acp::client_impl::tests::test_release_terminal_removes_from_map ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_memory_instructions ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_absent_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_alongside_complete_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_empty_model_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_empty_text_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_haiku ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_first_occurrence_wins ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_invalid_model_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_closing_tag_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_opening_tag_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_opus ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_sonnet ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_absent ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_build ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_with_all_fields ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_empty ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_invalid_phase ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_malformed_no_closing ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_plan ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_spec ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_with_whitespace ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_basic ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_no_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_malformed_no_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_absent ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_with_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_empty_content ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_basic ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_empty_content ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_no_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::result_event_default_has_no_hint ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_malformed_no_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing_with_space ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute ... ok
[INFO] [stdout] test acp::sigils::tests::result_event_with_hint ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_both ... ok
[INFO] [stdout] test acp::sigils::tests::task_sigil_with_model_hint ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute_empty_value ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_none ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute_missing ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_phase_complete ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_attributes_reversed_order ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_tasks_created ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_absent ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_tags ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_empty ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_multiline ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_tags_normalized ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_none_present ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_whitespace_only ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigils_multiple ... ok
[INFO] [stdout] test acp::streaming::tests::test_code_block_no_inline_formatting ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_partial ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_empty_body ... ok
[INFO] [stdout] test acp::streaming::tests::test_code_block_toggle ... ok
[INFO] [stdout] test acp::streaming::tests::test_empty_line ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h1_is_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h3_is_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h2_is_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_code ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_short_path ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_bash_command ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_just_filename ... ok
[INFO] [stdout] test acp::streaming::tests::test_plain_text_unchanged ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_edit_from_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_deep_path ... ok
[INFO] [stdout] test acp::streaming::tests::test_mixed_inline ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_empty_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_from_locations ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_grep_pattern ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_read_from_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_long ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_multiline ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_italic ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_all_present ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_backtick_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_italic_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_bold_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_json_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_input ... ok
[INFO] [stdout] test cli::tests::default_is_cost_optimized ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_json ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_null ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_locations ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_whitespace_only ... ok
[INFO] [stdout] test cli::tests::invalid_model_name_errors ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_short ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_kill ... ok
[INFO] [stdout] test cli::tests::fixed_without_model_errors ... ok
[INFO] [stdout] test cli::tests::non_fixed_strategy_with_model_works ... ok
[INFO] [stdout] test cli::tests::invalid_strategy_name_errors ... ok
[INFO] [stdout] test cli::tests::model_alone_implies_fixed ... ok
[INFO] [stdout] test cli::tests::fixed_with_model_works ... ok
[INFO] [stdout] test cli::tests::task_reset_yes_flag_parsed ... ok
[INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_feature_create ... ok
[INFO] [stdout] test cli::tests::task_fail_yes_flag_parsed ... ok
[INFO] [stdout] test cli::tests::test_allow_flag_absent ... ok
[INFO] [stdout] test cli::tests::task_done_yes_flag_parsed ... ok
[INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_run ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_title ... ok
[INFO] [stdout] test cli::tests::test_no_sandbox_flag_absent ... ok
[INFO] [stdout] test cli::tests::test_global_no_ui_flag ... ok
[INFO] [stdout] test cli::tests::valid_models_accepted ... ok
[INFO] [stdout] test cli::tests::valid_strategies_accepted ... ok
[INFO] [stdout] test config::tests::agent_id_different_on_separate_invocations ... ok
[INFO] [stdout] test config::tests::config_escalate_starts_at_haiku ... ok
[INFO] [stdout] test config::tests::agent_id_preserved_across_iterations ... ok
[INFO] [stdout] test config::tests::config_has_agent_id ... ok
[INFO] [stdout] test config::tests::config_model_alone_implies_fixed ... ok
[INFO] [stdout] test config::tests::config_next_iteration_preserves_strategy ... ok
[INFO] [stdout] test config::tests::model_strategy_from_str_invalid ... ok
[INFO] [stdout] test config::tests::agent_id_matches_format ... ok
[INFO] [stdout] test config::tests::model_strategy_from_str_valid ... ok
[INFO] [stdout] test config::tests::test_config_agent_override ... ok
[INFO] [stdout] test config::tests::test_agent_config_backward_compat ... ok
[INFO] [stdout] test config::tests::test_config_default_agent_command ... ok
[INFO] [stdout] test config::tests::config_default_strategy_is_cost_optimized ... ok
[INFO] [stdout] test config::tests::test_config_has_run_id ... ok
[INFO] [stdout] test config::tests::config_fixed_strategy_requires_model ... ok
[INFO] [stdout] test config::tests::test_config_no_sandbox_fields ... ok
[INFO] [stdout] test config::tests::test_execution_config_backward_compat ... ok
[INFO] [stdout] test config::tests::test_shlex_parse_error ... ok
[INFO] [stdout] test config::tests::config_plan_then_execute_starts_at_opus ... ok
[INFO] [stdout] test config::tests::model_strategy_display ... ok
[INFO] [stdout] test config::tests::config_fixed_strategy_with_model ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve_prefers_allow_once ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_release_cleanup ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_skills_section ... ok
[INFO] [stdout] test config::tests::test_agent_config_custom_command ... ok
[INFO] [stdout] test cli::tests::task_delete_yes_flag_parsed ... ok
[INFO] [stdout] test dag::crud::tests::test_add_log_nonexistent_task ... ok
[INFO] [stdout] test acp::client_impl::tests::test_create_terminal_and_output ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_create_and_output ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature_no_tasks ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_rejects_if_blocker ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task ... ok
[INFO] [stdout] test dag::crud::tests::test_add_log ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task_with_parent ... ok
[INFO] [stdout] test dag::crud::tests::test_get_nonexistent_task ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_allows_if_blocked ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_cascade_children ... ok
[INFO] [stdout] test dag::db::tests::test_fts5_available ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task_with_invalid_parent ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_nonexistent ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_single ... ok
[INFO] [stdout] test dag::db::tests::test_foreign_key_constraint_enforced ... ok
[INFO] [stdout] test dag::crud::tests::test_update_nonexistent_task ... ok
[INFO] [stdout] test dag::db::tests::test_duplicate_dependency_rejected ... ok
[INFO] [stdout] test dag::crud::tests::test_update_task_multiple_fields ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_with_children ... ok
[INFO] [stdout] test dag::db::tests::test_fresh_db_creates_tables ... ok
[INFO] [stdout] test dag::crud::tests::test_update_task_title ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_fresh_db ... ok
[INFO] [stdout] test dag::ids::tests::test_collision_retry ... ok
[INFO] [stdout] test dag::db::tests::test_foreign_keys_enabled ... ok
[INFO] [stdout] test dag::db::tests::test_idempotent_reopen ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_fts_triggers ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_migration_from_v2 ... ok
[INFO] [stdout] test dag::crud::tests::test_integration_create_graph_claim_complete ... ok
[INFO] [stdout] test dag::ids::tests::test_id_format ... ok
[INFO] [stdout] test dag::ids::tests::test_max_retries_exceeded ... ok
[INFO] [stdout] test dag::ids::tests::test_no_duplicates_in_1000_generates ... ok
[INFO] [stdout] test dag::db::tests::test_self_dependency_rejected ... ok
[INFO] [stdout] test dag::tests::task_counts_struct_has_required_fields ... ok
[INFO] [stdout] test dag::tests::task_struct_has_required_fields ... ok
[INFO] [stdout] test dag::db::tests::test_wal_mode_enabled ... ok
[INFO] [stdout] test dag::dependencies::tests::test_add_valid_dependency ... ok
[INFO] [stdout] test dag::dependencies::tests::test_remove_dependency ... ok
[INFO] [stdout] test dag::dependencies::tests::test_dependency_on_nonexistent_task_fails ... ok
[INFO] [stdout] test dag::dependencies::tests::test_longer_cycle_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_direct_cycle_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_diamond_structure_allowed ... ok
[INFO] [stdout] test dag::dependencies::tests::test_transitive_cycle_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_self_dependency_rejected ... ok
[INFO] [stdout] test dag::tasks::tests::test_leaf_task_returns_stored_status ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_done_one_pending ... ok
[INFO] [stdout] test dag::tests::test_non_leaf_task_not_ready ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_in_progress ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_failed ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_all_done ... ok
[INFO] [stdout] test dag::tasks::tests::test_three_level_hierarchy ... ok
[INFO] [stdout] test dag::tests::test_ready_task_with_no_deps_no_parent ... ok
[INFO] [stdout] test dag::tests::test_ready_tasks_ordering ... ok
[INFO] [stdout] test dag::tests::test_ready_tasks_ordering_same_priority ... ok
[INFO] [stdout] test dag::tests::test_task_with_pending_blocker_not_ready ... ok
[INFO] [stdout] test dag::tests::test_task_with_failed_parent_not_ready ... ok
[INFO] [stdout] test dag::tests::test_task_with_all_blockers_done_is_ready ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_complete_parent_when_all_children_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_fail_parent_when_child_fails ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_complete_feature_when_all_tasks_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_fail_feature_when_task_fails_and_all_resolved ... ok
[INFO] [stdout] test dag::transitions::tests::test_failed_to_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_done_to_in_progress_fails ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_unblock_when_blocker_completes ... ok
[INFO] [stdout] test dag::transitions::tests::test_blocked_to_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_done_to_pending_fails ... ok
[INFO] [stdout] test feature::tests::test_ensure_feature_dirs ... ok
[INFO] [stdout] test dag::transitions::tests::test_feature_not_updated_when_tasks_still_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_force_complete_task_returns_combined_transitions ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_failed ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_pending ... ok
[INFO] [stdout] test interrupt::tests::append_feedback_single ... ok
[INFO] [stdout] test interrupt::tests::append_feedback_stacks ... ok
[INFO] [stdout] test interrupt::tests::clear_interrupt_resets_signal_shutdown_flag ... ok
[INFO] [stdout] test interrupt::tests::is_interrupted_default_false ... ok
[INFO] [stdout] test interrupt::tests::request_interrupt_sets_flag ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query_basic ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query_empty ... ok
[INFO] [stdout] test dag::transitions::tests::test_pending_to_in_progress ... ok
[INFO] [stdout] test dag::transitions::tests::test_pending_to_blocked ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_completed ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_failed ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_budget ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_empty ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_format ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_no_notes ... ok
[INFO] [stdout] test journal::tests::test_render_single_entry_nonzero_cost_shows_cost_line ... ok
[INFO] [stdout] test journal::tests::test_render_single_entry_zero_cost_omits_cost_line ... ok
[INFO] [stdout] test feature::tests::test_delete_nonexistent_feature ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_basic ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_bidirectional ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_case_insensitive ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_ignores_nonexistent_targets ... ok
[INFO] [stdout] test feature::tests::test_delete_feature ... ok
[INFO] [stdout] test feature::tests::test_create_duplicate_feature_fails ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_empty ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_missing_dir ... ok
[INFO] [stdout] test knowledge::tests::test_discover_and_build_link_graph ... ok
[INFO] [stdout] test feature::tests::test_create_feature ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_empty_graph ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_max_hops_respected ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_no_duplicates_with_initial ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_one_hop ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_two_hops ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_basic ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_case_insensitive_dedup ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_deduplicates ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_empty_link_skipped ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_multiple ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_no_links ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_parses_files ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_whitespace_trimmed ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_malformed ... ok
[INFO] [stdout] test knowledge::tests::test_get_backlinks ... ok
[INFO] [stdout] test knowledge::tests::test_get_backlinks_none ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_unclosed ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_entries_by_tags ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_feature_bonus ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_file_path_bonus ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_multiple_tags_accumulate ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_non_md_files ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_sorted_by_score ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_no_match ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_frontmatter ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_tags ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_empty_tags ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_title ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_optional_feature ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context_empty ... ok
[INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_backlinks ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context_budget ... ok
[INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_outlinks ... ok
[INFO] [stdout] test knowledge::tests::test_render_without_graph_no_links ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_basic ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_consecutive_hyphens ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_exactly_80_chars ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_leading_trailing_hyphens ... ok
[INFO] [stdout] test dag::transitions::tests::test_standalone_task_does_not_affect_features ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_long ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_special_chars ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_unblocked ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_no_tags ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_with_feature ... ok
[INFO] [stdout] test feature::tests::test_get_feature ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_new ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_tag_overlap ... ok
[INFO] [stdout] test project::tests::discovers_config_two_directories_up ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_exact_title ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_truncation ... ok
[INFO] [stdout] test feature::tests::test_feature_exists ... ok
[INFO] [stdout] test project::tests::discovers_config_in_cwd ... ok
[INFO] [stdout] test project::tests::ralph_config_default_values ... ok
[INFO] [stdout] test project::tests::invalid_toml_returns_error ... ok
[INFO] [stdout] test project::tests::empty_toml_parses_to_defaults ... ok
[INFO] [stdout] test project::tests::partial_config_uses_defaults_for_missing_sections ... ok
[INFO] [stdout] test project::tests::no_config_returns_error_with_init_message ... ok
[INFO] [stdout] test feature::tests::test_get_nonexistent_feature ... ok
[INFO] [stdout] test project::tests::ui_colors_all_tokens_accepted ... ok
[INFO] [stdout] test project::tests::ui_colors_invalid_hex_rejected_at_load ... ok
[INFO] [stdout] test project::tests::ui_colors_invalid_name_rejected_at_load ... ok
[INFO] [stdout] test project::tests::ui_colors_missing_uses_defaults ... ok
[INFO] [stdout] test project::tests::ui_colors_partial_overrides ... ok
[INFO] [stdout] test project::tests::ui_config_defaults_to_light_theme ... ok
[INFO] [stdout] test project::tests::ui_config_missing_section_uses_default ... ok
[INFO] [stdout] test project::tests::ui_config_parses_dark_theme ... ok
[INFO] [stdout] test project::tests::unknown_keys_ignored_for_forward_compat ... ok
[INFO] [stdout] test review::tests::test_document_kind_labels ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_absent ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_empty ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_multiline ... ok
[INFO] [stdout] test review::tests::test_parse_review_pass ... ok
[INFO] [stdout] test review::tests::test_review_prompt_includes_context ... ok
[INFO] [stdout] test review::tests::test_review_prompt_plan_criteria ... ok
[INFO] [stdout] test review::tests::test_review_prompt_round_note ... ok
[INFO] [stdout] test review::tests::test_review_prompt_spec_criteria ... ok
[INFO] [stdout] test journal::tests::test_insert_journal_entry ... ok
[INFO] [stdout] test feature::tests::test_list_features ... ok
[INFO] [stdout] test feature::tests::test_update_feature_status ... ok
[INFO] [stdout] test journal::tests::test_insert_journal_entry_no_notes ... ok
[INFO] [stdout] test project::tests::init_appends_to_existing_gitignore ... ok
[INFO] [stdout] test journal::tests::test_select_journal_entries ... ok
[INFO] [stdout] test journal::tests::test_query_journal_recent ... ok
[INFO] [stdout] test project::tests::init_creates_all_files_and_directories ... ok
[INFO] [stdout] test project::tests::test_init_existing_claude_dir ... ok
[INFO] [stdout] test project::tests::init_is_idempotent ... ok
[INFO] [stdout] test project::tests::test_init_no_ralph_skills ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_ambiguous_progress_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_default_iteration_1_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_empty_progress_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_error_signals_return_opus ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_errors_override_completions ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_failure_signal_returns_opus ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_steady_completions_return_haiku ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_stuck_signal_returns_opus ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_two_completions_still_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::escalate_escalation_sequence_haiku_to_sonnet_to_opus ... ok
[INFO] [stdout] test project::tests::test_init_creates_claude_skills ... ok
[INFO] [stdout] test project::tests::test_init_legacy_skills_notice ... ok
[INFO] [stdout] test strategy::tests::escalate_model_to_level_mapping ... ok
[INFO] [stdout] test strategy::tests::escalate_moderate_distress_returns_sonnet_level ... ok
[INFO] [stdout] test strategy::tests::escalate_never_auto_de_escalates ... ok
[INFO] [stdout] test strategy::tests::escalate_no_distress_stays_haiku ... ok
[INFO] [stdout] test run_loop::tests::empty_dag_returns_noplan ... ok
[INFO] [stdout] test strategy::tests::escalate_severe_distress_returns_opus_level ... ok
[INFO] [stdout] test strategy::tests::escalate_starts_at_haiku ... ok
[INFO] [stdout] test strategy::tests::escalate_stays_at_escalated_level_across_iterations ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_ignores_iteration_number ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_configured_model ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_haiku_when_configured ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_sonnet_when_configured ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_same_model_across_iterations ... ok
[INFO] [stdout] test strategy::tests::hint_differing_from_strategy_is_override ... ok
[INFO] [stdout] test strategy::tests::hint_matching_strategy_is_not_override ... ok
[INFO] [stdout] test strategy::tests::hint_overrides_cost_optimized_strategy ... ok
[INFO] [stdout] test strategy::tests::hint_overrides_fixed_strategy ... ok
[INFO] [stdout] test strategy::tests::no_hint_means_no_override ... ok
[INFO] [stdout] test project::tests::test_init_creates_knowledge_dir ... ok
[INFO] [stdout] test run_loop::tests::completed_blockers_are_retrieved ... ok
[INFO] [stdout] test run_loop::tests::blocked_tasks_return_blocked_outcome ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_config_starts_at_opus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_1 ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_2_plus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_iteration_1 ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_haiku ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_opus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_1_returns_opus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_2_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_5_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_no_override_when_hint_matches ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_override_detected_on_iteration_2 ... ok
[INFO] [stdout] test ui::app::tests::backspace_at_mid_cursor ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_cursor_navigation ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_number_key_selects ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_typing_switches_to_freetext ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_home_end ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_left_right ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_up_down ... ok
[INFO] [stdout] test ui::app::tests::delete_key ... ok
[INFO] [stdout] test ui::app::tests::freetext_ctrl_c_interrupts ... ok
[INFO] [stdout] test ui::app::tests::freetext_empty_enter_exits ... ok
[INFO] [stdout] test ui::app::tests::freetext_enter_submits ... ok
[INFO] [stdout] test ui::app::tests::freetext_shift_enter_inserts_newline ... ok
[INFO] [stdout] test ui::app::tests::freetext_typing_and_backspace ... ok
[INFO] [stdout] test ui::app::tests::pageup_pagedown_scroll_agent_during_input ... ok
[INFO] [stdout] test ui::event::tests::event_line_partial_eq ... ok
[INFO] [stdout] test ui::state::tests::agent_text_is_capped_and_utf8_safe ... ok
[INFO] [stdout] test ui::state::tests::apply_handles_ui_event_event ... ok
[INFO] [stdout] test ui::state::tests::apply_updates_status_line ... ok
[INFO] [stdout] test run_loop::tests::last_failure_reason_from_logs ... ok
[INFO] [stdout] test ui::state::tests::events_ring_buffer_adjusts_scroll_offset ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_down_resumes_auto_scroll ... ok
[INFO] [stdout] test run_loop::tests::last_failure_reason_missing ... ok
[INFO] [stdout] test ui::state::tests::events_ring_buffer_caps_at_max ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_to_bottom ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_up_from_auto_scroll ... ok
[INFO] [stdout] test ui::state::tests::explorer_scroll_bounds ... ok
[INFO] [stdout] test ui::state::tests::input_activation_and_deactivation ... ok
[INFO] [stdout] test journal::tests::test_query_journal_fts ... ok
[INFO] [stdout] test ui::tests::env_parser_defaults_to_auto_for_unknown ... ok
[INFO] [stdout] test ui::tests::no_ui_flag_wins ... ok
[INFO] [stdout] test ui::tests::prompt_calls_fallback_when_ui_not_running ... ok
[INFO] [stdout] test ui::tests::non_tty_fallback_matrix ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_empty_is_noop ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_all_fields ... ok
[INFO] [stdout] test ui::theme::tests::dark_theme_uses_reset_background ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_validate_valid ... ok
[INFO] [stdout] test ui::theme::tests::event_task_color_override_applies ... ok
[INFO] [stdout] test ui::theme::tests::event_category_style_returns_non_default_for_all_categories ... ok
[INFO] [stdout] test ui::theme::tests::light_theme_uses_reset_background ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_hex_invalid ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_hex_valid ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_named ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_trims_whitespace ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_unknown_name ... ok
[INFO] [stdout] test ui::theme::tests::resolve_env_invalid_falls_through_to_config ... ok
[INFO] [stdout] test ui::theme::tests::resolve_env_overrides_config ... ok
[INFO] [stdout] test ui::theme::tests::resolve_falls_back_to_dark ... ok
[INFO] [stdout] test ui::theme::tests::resolve_uses_config_value ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_dark ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_partial_apply ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_invalid ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_validate_invalid ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_light ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_inactive ... ok
[INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_releases_same_agent_claim ... ok
[INFO] [stdout] test strategy::tests::escalate_hint_de_escalates_level ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_choices ... ok
[INFO] [stdout] test ui::view::tests::input_pane_does_not_panic_on_tiny_frame ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_tool_activity_in_left_column ... ok
[INFO] [stdout] test ui::view::tests::explorer_screen_renders_title ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail_absent ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail_empty ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_pass ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_freetext ... ok
[INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_ignores_other_agent_claim ... ok
[INFO] [stdout] test run_loop::tests::scoped_target_resolved_task_ignores_unrelated_pending_tasks ... ok
[INFO] [stdout] test strategy::tests::escalate_override_detected_when_hint_differs ... ok
[INFO] [stdout] test run_loop::tests::try_release_claim_resets_in_progress_task ... ok
[INFO] [stdout] test run_loop::tests::scoped_target_resolved_feature_ignores_unrelated_pending_tasks ... ok
[INFO] [stdout] test strategy::tests::escalate_hint_can_escalate_level ... ok
[INFO] [stdout] test strategy::tests::no_override_means_no_log_entry ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_core_panels ... ok
[INFO] [stdout] test run_loop::tests::ready_tasks_are_picked_in_order ... ok
[INFO] [stdout] test ui::view::tests::modal_renders_over_base_screen ... ok
[INFO] [stdout] test strategy::tests::override_inserts_without_clobbering_existing_rows ... ok
[INFO] [stdout] test strategy::tests::override_logged_to_model_overrides_table ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 522 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.36s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ralph-5b75737d06930cb8)
[INFO] [stdout] 
[INFO] [stdout] running 538 tests
[INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_rejects_unlisted_file ... ok
[INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_permits_listed_file ... ok
[INFO] [stdout] test acp::client_impl::tests::test_no_write_path_restriction_allows_any ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_basic ... ok
[INFO] [stdout] test acp::client_impl::tests::test_terminal_not_found_returns_error ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_parent_traversal_rejected ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_basic ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve_prefers_allow_once ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_with_line_limit ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_denies_writes ... ok
[INFO] [stdout] test acp::client_impl::tests::test_take_accumulated_text ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_nonexistent ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_creates_parents ... ok
[INFO] [stdout] test acp::client_impl::tests::test_release_terminal_removes_from_map ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_outside_project_rejected ... ok
[INFO] [stdout] test acp::client_impl::tests::test_take_files_modified ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_not_authenticated ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_generic_failure ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_unrelated_errors ... ok
[INFO] [stdout] test acp::connection::tests::test_model_override_takes_precedence ... ok
[INFO] [stdout] test acp::connection::tests::test_autonomous_prompt_concatenation ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_modified ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_auth_expired ... ok
[INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_authentication_required ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_malformed_command_returns_error ... ok
[INFO] [stdout] test acp::client_impl::tests::test_read_text_file_outside_project_rejected ... ok
[INFO] [stdout] test acp::connection::tests::test_no_model_override_uses_default ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_quoted_args ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_double_quoted_args ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_simple_command ... ok
[INFO] [stdout] test acp::connection::tests::test_ralph_model_env_var_key ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_cancelled_maps_to_interrupted ... ok
[INFO] [stdout] test acp::interactive::tests::test_multiline_result_variants_exist ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_refusal_is_not_end_turn ... ok
[INFO] [stdout] test acp::interactive::tests::test_poll_interrupt_is_async ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_nested_relative ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_empty_command_returns_error ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_end_turn_is_completed ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_all_three_model_names ... ok
[INFO] [stdout] test acp::interactive::tests::test_run_streaming_is_async ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_haiku_example ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_sonnet_example ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_tag ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_completion_sigils ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_no_progress_file_references ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_no_blockers_omits_prerequisites_section ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_one_task_per_loop ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_no_parent_omits_parent_section ... ok
[INFO] [stdout] test acp::connection::tests::test_stop_reason_max_tokens_is_not_end_turn ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_task_sigils ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_with_two_blockers ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_verbatim_fields ... ok
[INFO] [stdout] test acp::prompt::tests::test_iteration_context_fields_no_skills_summary ... ok
[INFO] [stdout] test acp::prompt::tests::task_context_with_all_fields ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_journal ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_knowledge ... ok
[INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_opus_example ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_memory_instructions ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_journal_when_empty ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_absent_returns_none ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_knowledge_when_empty ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_alongside_complete_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_haiku ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_learning_section ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_invalid_model_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_closing_tag_returns_none ... ok
[INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_skills_section ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_opening_tag_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::both_task_sigils_task_done_wins ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_empty_text_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_sonnet ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_empty_model_returns_none ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_opus ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_first_occurrence_wins ... ok
[INFO] [stdout] test acp::sigils::tests::parse_hint_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_absent ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_build ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_empty ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_invalid_phase ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_plan ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_malformed_no_closing ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_with_whitespace ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_empty_content ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_basic ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_empty_content ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_malformed_no_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_basic ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_malformed_no_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::parse_phase_complete_spec ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_no_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_no_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_done_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::task_sigil_with_model_hint ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing_with_space ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_with_closing_tag ... ok
[INFO] [stdout] test acp::sigils::tests::result_event_with_hint ... ok
[INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_whitespace_inside_tags ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_absent ... ok
[INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing ... ok
[INFO] [stdout] test acp::sigils::tests::result_event_default_has_no_hint ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute_empty_value ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_both ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_none ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_phase_complete ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_all_present ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_none_present ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_sigils_partial ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_absent ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_tasks_created ... ok
[INFO] [stdout] test acp::sigils::tests::test_extract_attribute_missing ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_empty ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_multiline ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_whitespace_only ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_with_context ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_attributes_reversed_order ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_tags ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_title ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_tags_normalized ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigils_multiple ... ok
[INFO] [stdout] test acp::streaming::tests::test_code_block_toggle ... ok
[INFO] [stdout] test acp::streaming::tests::test_empty_line ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h1_is_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h3_is_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_code ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_italic ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_deep_path ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_short_path ... ok
[INFO] [stdout] test acp::streaming::tests::test_heading_h2_is_bold ... ok
[INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_empty_body ... ok
[INFO] [stdout] test acp::streaming::tests::test_shorten_just_filename ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_bash_command ... ok
[INFO] [stdout] test acp::streaming::tests::test_code_block_no_inline_formatting ... ok
[INFO] [stdout] test acp::streaming::tests::test_inline_bold ... ok
[INFO] [stdout] test acp::streaming::tests::test_mixed_inline ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_from_locations ... ok
[INFO] [stdout] test acp::streaming::tests::test_plain_text_unchanged ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_grep_pattern ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_edit_from_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_empty_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_multiline ... ok
[INFO] [stdout] test acp::streaming::tests::test_summary_read_from_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_short ... ok
[INFO] [stdout] test acp::streaming::tests::test_truncate_long ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_backtick_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_bold_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_input ... ok
[INFO] [stdout] test acp::streaming::tests::test_unclosed_italic_left_asis ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_json ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_whitespace_only ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_locations ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_json_input ... ok
[INFO] [stdout] test cli::tests::default_is_cost_optimized ... ok
[INFO] [stdout] test acp::streaming::tests::test_useful_summary_null ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_kill ... ok
[INFO] [stdout] test acp::connection::tests::test_parse_command_with_args ... ok
[INFO] [stdout] test acp::interactive::tests::test_first_prompt_concatenation ... ok
[INFO] [stdout] test acp::interactive::tests::test_run_interactive_is_async ... ok
[INFO] [stdout] test cli::tests::fixed_with_model_works ... ok
[INFO] [stdout] test cli::tests::fixed_without_model_errors ... ok
[INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_approves_reads ... ok
[INFO] [stdout] test acp::client_impl::tests::test_write_text_file_read_only_rejected ... ok
[INFO] [stdout] test acp::client_impl::tests::test_kill_terminal ... ok
[INFO] [stdout] test cli::tests::invalid_model_name_errors ... ok
[INFO] [stdout] test cli::tests::model_alone_implies_fixed ... ok
[INFO] [stdout] test cli::tests::invalid_strategy_name_errors ... ok
[INFO] [stdout] test cli::tests::non_fixed_strategy_with_model_works ... ok
[INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_feature_create ... ok
[INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_run ... ok
[INFO] [stdout] test cli::tests::test_allow_flag_absent ... ok
[INFO] [stdout] test cli::tests::test_global_no_ui_flag ... ok
[INFO] [stdout] test cli::tests::valid_models_accepted ... ok
[INFO] [stdout] test cli::tests::test_no_sandbox_flag_absent ... ok
[INFO] [stdout] test cli::tests::valid_strategies_accepted ... ok
[INFO] [stdout] test config::tests::agent_id_different_on_separate_invocations ... ok
[INFO] [stdout] test config::tests::agent_id_matches_format ... ok
[INFO] [stdout] test config::tests::agent_id_preserved_across_iterations ... ok
[INFO] [stdout] test cli::tests::task_reset_yes_flag_parsed ... ok
[INFO] [stdout] test cli::tests::task_delete_yes_flag_parsed ... ok
[INFO] [stdout] test config::tests::config_escalate_starts_at_haiku ... ok
[INFO] [stdout] test config::tests::config_default_strategy_is_cost_optimized ... ok
[INFO] [stdout] test cli::tests::task_fail_yes_flag_parsed ... ok
[INFO] [stdout] test config::tests::config_has_agent_id ... ok
[INFO] [stdout] test config::tests::config_fixed_strategy_requires_model ... ok
[INFO] [stdout] test config::tests::config_fixed_strategy_with_model ... ok
[INFO] [stdout] test config::tests::config_model_alone_implies_fixed ... ok
[INFO] [stdout] test config::tests::config_next_iteration_preserves_strategy ... ok
[INFO] [stdout] test config::tests::config_plan_then_execute_starts_at_opus ... ok
[INFO] [stdout] test config::tests::model_strategy_display ... ok
[INFO] [stdout] test config::tests::model_strategy_from_str_invalid ... ok
[INFO] [stdout] test config::tests::model_strategy_from_str_valid ... ok
[INFO] [stdout] test config::tests::test_agent_config_backward_compat ... ok
[INFO] [stdout] test config::tests::test_agent_config_custom_command ... ok
[INFO] [stdout] test config::tests::test_config_agent_override ... ok
[INFO] [stdout] test config::tests::test_config_has_run_id ... ok
[INFO] [stdout] test config::tests::test_config_default_agent_command ... ok
[INFO] [stdout] test config::tests::test_config_no_sandbox_fields ... ok
[INFO] [stdout] test config::tests::test_execution_config_backward_compat ... ok
[INFO] [stdout] test config::tests::test_shlex_parse_error ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_release_cleanup ... ok
[INFO] [stdout] test cli::tests::task_done_yes_flag_parsed ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature_no_tasks ... ok
[INFO] [stdout] test acp::tools::tests::test_terminal_create_and_output ... ok
[INFO] [stdout] test dag::crud::tests::test_add_log ... ok
[INFO] [stdout] test dag::crud::tests::test_add_log_nonexistent_task ... ok
[INFO] [stdout] test dag::crud::tests::test_get_nonexistent_task ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_allows_if_blocked ... ok
[INFO] [stdout] test acp::client_impl::tests::test_create_terminal_and_output ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task_with_invalid_parent ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_rejects_if_blocker ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_task_cascade_children ... ok
[INFO] [stdout] test dag::db::tests::test_fts5_available ... ok
[INFO] [stdout] test dag::crud::tests::test_create_task_with_parent ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_nonexistent ... ok
[INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_single ... ok
[INFO] [stdout] test dag::crud::tests::test_update_nonexistent_task ... ok
[INFO] [stdout] test dag::crud::tests::test_update_task_multiple_fields ... ok
[INFO] [stdout] test dag::crud::tests::test_update_task_title ... ok
[INFO] [stdout] test dag::db::tests::test_duplicate_dependency_rejected ... ok
[INFO] [stdout] test dag::db::tests::test_idempotent_reopen ... ok
[INFO] [stdout] test dag::crud::tests::test_get_task_tree_with_children ... ok
[INFO] [stdout] test dag::crud::tests::test_integration_create_graph_claim_complete ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_fts_triggers ... ok
[INFO] [stdout] test dag::ids::tests::test_collision_retry ... ok
[INFO] [stdout] test dag::ids::tests::test_id_format ... ok
[INFO] [stdout] test dag::ids::tests::test_max_retries_exceeded ... ok
[INFO] [stdout] test dag::db::tests::test_fresh_db_creates_tables ... ok
[INFO] [stdout] test dag::db::tests::test_wal_mode_enabled ... ok
[INFO] [stdout] test dag::ids::tests::test_no_duplicates_in_1000_generates ... ok
[INFO] [stdout] test dag::db::tests::test_foreign_key_constraint_enforced ... ok
[INFO] [stdout] test dag::db::tests::test_foreign_keys_enabled ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_fresh_db ... ok
[INFO] [stdout] test dag::db::tests::test_schema_v3_migration_from_v2 ... ok
[INFO] [stdout] test dag::tests::task_counts_struct_has_required_fields ... ok
[INFO] [stdout] test dag::tests::task_struct_has_required_fields ... ok
[INFO] [stdout] test dag::db::tests::test_self_dependency_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_dependency_on_nonexistent_task_fails ... ok
[INFO] [stdout] test dag::dependencies::tests::test_add_valid_dependency ... ok
[INFO] [stdout] test dag::dependencies::tests::test_direct_cycle_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_diamond_structure_allowed ... ok
[INFO] [stdout] test dag::dependencies::tests::test_self_dependency_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_transitive_cycle_rejected ... ok
[INFO] [stdout] test dag::dependencies::tests::test_remove_dependency ... ok
[INFO] [stdout] test dag::tasks::tests::test_leaf_task_returns_stored_status ... ok
[INFO] [stdout] test dag::tests::test_non_leaf_task_not_ready ... ok
[INFO] [stdout] test dag::tasks::tests::test_three_level_hierarchy ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_all_done ... ok
[INFO] [stdout] test dag::dependencies::tests::test_longer_cycle_rejected ... ok
[INFO] [stdout] test dag::tests::test_ready_task_with_no_deps_no_parent ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_in_progress ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_done_one_pending ... ok
[INFO] [stdout] test dag::tasks::tests::test_parent_one_failed ... ok
[INFO] [stdout] test dag::tests::test_ready_tasks_ordering ... ok
[INFO] [stdout] test dag::tests::test_task_with_failed_parent_not_ready ... ok
[INFO] [stdout] test dag::tests::test_task_with_pending_blocker_not_ready ... ok
[INFO] [stdout] test dag::tests::test_ready_tasks_ordering_same_priority ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_fail_feature_when_task_fails_and_all_resolved ... ok
[INFO] [stdout] test dag::transitions::tests::test_done_to_pending_fails ... ok
[INFO] [stdout] test dag::transitions::tests::test_done_to_in_progress_fails ... ok
[INFO] [stdout] test dag::tests::test_task_with_all_blockers_done_is_ready ... ok
[INFO] [stdout] test dag::transitions::tests::test_blocked_to_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_complete_feature_when_all_tasks_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_unblock_when_blocker_completes ... ok
[INFO] [stdout] test dag::transitions::tests::test_feature_not_updated_when_tasks_still_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_failed_to_pending ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_fail_parent_when_child_fails ... ok
[INFO] [stdout] test feature::tests::test_ensure_feature_dirs ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_force_complete_task_returns_combined_transitions ... ok
[INFO] [stdout] test dag::transitions::tests::test_auto_complete_parent_when_all_children_done ... ok
[INFO] [stdout] test dag::transitions::tests::test_pending_to_blocked ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_pending ... ok
[INFO] [stdout] test interrupt::tests::append_feedback_single ... ok
[INFO] [stdout] test interrupt::tests::append_feedback_stacks ... ok
[INFO] [stdout] test interrupt::tests::clear_interrupt_resets_signal_shutdown_flag ... ok
[INFO] [stdout] test interrupt::tests::is_interrupted_default_false ... ok
[INFO] [stdout] test interrupt::tests::request_interrupt_sets_flag ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query_basic ... ok
[INFO] [stdout] test journal::tests::test_build_fts_query_empty ... ok
[INFO] [stdout] test dag::transitions::tests::test_in_progress_to_failed ... ok
[INFO] [stdout] test dag::transitions::tests::test_pending_to_in_progress ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_failed ... ok
[INFO] [stdout] test feature::tests::test_create_duplicate_feature_fails ... ok
[INFO] [stdout] test dag::transitions::tests::test_standalone_task_does_not_affect_features ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_budget ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_empty ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_format ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context_no_notes ... ok
[INFO] [stdout] test journal::tests::test_render_single_entry_nonzero_cost_shows_cost_line ... ok
[INFO] [stdout] test journal::tests::test_render_single_entry_zero_cost_omits_cost_line ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_completed ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_basic ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_bidirectional ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_case_insensitive ... ok
[INFO] [stdout] test knowledge::tests::test_build_link_graph_ignores_nonexistent_targets ... ok
[INFO] [stdout] test knowledge::tests::test_discover_and_build_link_graph ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_empty ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_missing_dir ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_parses_files ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_malformed ... ok
[INFO] [stdout] test feature::tests::test_get_feature ... ok
[INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_non_md_files ... ok
[INFO] [stdout] test feature::tests::test_delete_nonexistent_feature ... ok
[INFO] [stdout] test feature::tests::test_delete_feature ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_empty_graph ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_no_duplicates_with_initial ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_one_hop ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_two_hops ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_basic ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_case_insensitive_dedup ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_deduplicates ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_empty_link_skipped ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_multiple ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_no_links ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_unclosed ... ok
[INFO] [stdout] test knowledge::tests::test_extract_links_whitespace_trimmed ... ok
[INFO] [stdout] test knowledge::tests::test_get_backlinks ... ok
[INFO] [stdout] test knowledge::tests::test_get_backlinks_none ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_entries_by_tags ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_feature_bonus ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_file_path_bonus ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_multiple_tags_accumulate ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_no_match ... ok
[INFO] [stdout] test knowledge::tests::test_match_knowledge_sorted_by_score ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_empty_tags ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_frontmatter ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_tags ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_title ... ok
[INFO] [stdout] test knowledge::tests::test_expand_via_links_max_hops_respected ... ok
[INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_optional_feature ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context_empty ... ok
[INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_backlinks ... ok
[INFO] [stdout] test knowledge::tests::test_render_knowledge_context_budget ... ok
[INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_outlinks ... ok
[INFO] [stdout] test knowledge::tests::test_render_without_graph_no_links ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_basic ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_consecutive_hyphens ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_exactly_80_chars ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_leading_trailing_hyphens ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_long ... ok
[INFO] [stdout] test knowledge::tests::test_slugify_title_special_chars ... ok
[INFO] [stdout] test feature::tests::test_get_nonexistent_feature ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_new ... ok
[INFO] [stdout] test feature::tests::test_create_feature ... ok
[INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_unblocked ... ok
[INFO] [stdout] test feature::tests::test_feature_exists ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_no_tags ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_tag_overlap ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_with_feature ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_exact_title ... ok
[INFO] [stdout] test project::tests::discovers_config_in_cwd ... ok
[INFO] [stdout] test project::tests::discovers_config_two_directories_up ... ok
[INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_truncation ... ok
[INFO] [stdout] test project::tests::ralph_config_default_values ... ok
[INFO] [stdout] test project::tests::no_config_returns_error_with_init_message ... ok
[INFO] [stdout] test project::tests::empty_toml_parses_to_defaults ... ok
[INFO] [stdout] test project::tests::partial_config_uses_defaults_for_missing_sections ... ok
[INFO] [stdout] test project::tests::invalid_toml_returns_error ... ok
[INFO] [stdout] test feature::tests::test_update_feature_status ... ok
[INFO] [stdout] test journal::tests::test_render_journal_context ... ok
[INFO] [stdout] test project::tests::ui_colors_all_tokens_accepted ... ok
[INFO] [stdout] test project::tests::ui_colors_invalid_hex_rejected_at_load ... ok
[INFO] [stdout] test project::tests::ui_colors_missing_uses_defaults ... ok
[INFO] [stdout] test project::tests::ui_colors_partial_overrides ... ok
[INFO] [stdout] test project::tests::ui_config_defaults_to_light_theme ... ok
[INFO] [stdout] test project::tests::ui_config_missing_section_uses_default ... ok
[INFO] [stdout] test project::tests::ui_config_parses_dark_theme ... ok
[INFO] [stdout] test project::tests::ui_colors_invalid_name_rejected_at_load ... ok
[INFO] [stdout] test review::tests::test_document_kind_labels ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_absent ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_empty ... ok
[INFO] [stdout] test review::tests::test_parse_review_changes_multiline ... ok
[INFO] [stdout] test review::tests::test_parse_review_pass ... ok
[INFO] [stdout] test review::tests::test_review_prompt_includes_context ... ok
[INFO] [stdout] test review::tests::test_review_prompt_plan_criteria ... ok
[INFO] [stdout] test review::tests::test_review_prompt_round_note ... ok
[INFO] [stdout] test review::tests::test_review_prompt_spec_criteria ... ok
[INFO] [stdout] test feature::tests::test_list_features ... ok
[INFO] [stdout] test journal::tests::test_insert_journal_entry_no_notes ... ok
[INFO] [stdout] test journal::tests::test_insert_journal_entry ... ok
[INFO] [stdout] test journal::tests::test_query_journal_fts ... ok
[INFO] [stdout] test journal::tests::test_select_journal_entries ... ok
[INFO] [stdout] test journal::tests::test_query_journal_recent ... ok
[INFO] [stdout] test project::tests::init_creates_all_files_and_directories ... ok
[INFO] [stdout] test project::tests::test_init_creates_knowledge_dir ... ok
[INFO] [stdout] test project::tests::init_appends_to_existing_gitignore ... ok
[INFO] [stdout] test project::tests::test_init_legacy_skills_notice ... ok
[INFO] [stdout] test project::tests::unknown_keys_ignored_for_forward_compat ... ok
[INFO] [stdout] test project::tests::test_init_existing_claude_dir ... ok
[INFO] [stdout] test run_loop::tests::empty_dag_returns_noplan ... ok
[INFO] [stdout] test project::tests::init_is_idempotent ... ok
[INFO] [stdout] test run_loop::tests::completed_blockers_are_retrieved ... ok
[INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_ignores_other_agent_claim ... ok
[INFO] [stdout] test run_loop::tests::last_failure_reason_from_logs ... ok
[INFO] [stdout] test project::tests::test_init_no_ralph_skills ... ok
[INFO] [stdout] test run_loop::tests::blocked_tasks_return_blocked_outcome ... ok
[INFO] [stdout] test run_loop::tests::last_failure_reason_missing ... ok
[INFO] [stdout] test project::tests::test_init_creates_claude_skills ... ok
[INFO] [stdout] test run_loop::tests::scoped_target_resolved_feature_ignores_unrelated_pending_tasks ... ok
[INFO] [stdout] test run_loop::tests::ready_tasks_are_picked_in_order ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_ambiguous_progress_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_empty_progress_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_failure_signal_returns_opus ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_stuck_signal_returns_opus ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_two_completions_still_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::escalate_escalation_sequence_haiku_to_sonnet_to_opus ... ok
[INFO] [stdout] test strategy::tests::escalate_model_to_level_mapping ... ok
[INFO] [stdout] test strategy::tests::escalate_starts_at_haiku ... ok
[INFO] [stdout] test strategy::tests::escalate_severe_distress_returns_opus_level ... ok
[INFO] [stdout] test strategy::tests::escalate_stays_at_escalated_level_across_iterations ... ok
[INFO] [stdout] test strategy::tests::escalate_moderate_distress_returns_sonnet_level ... ok
[INFO] [stdout] test strategy::tests::escalate_never_auto_de_escalates ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_ignores_iteration_number ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_configured_model ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_haiku_when_configured ... ok
[INFO] [stdout] test strategy::tests::hint_matching_strategy_is_not_override ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_same_model_across_iterations ... ok
[INFO] [stdout] test strategy::tests::hint_differing_from_strategy_is_override ... ok
[INFO] [stdout] test strategy::tests::hint_overrides_fixed_strategy ... ok
[INFO] [stdout] test strategy::tests::no_hint_means_no_override ... ok
[INFO] [stdout] test strategy::tests::escalate_hint_de_escalates_level ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_config_starts_at_opus ... ok
[INFO] [stdout] test strategy::tests::escalate_hint_can_escalate_level ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_1 ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_2_plus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_iteration_1 ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_haiku ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_opus ... ok
[INFO] [stdout] test strategy::tests::hint_overrides_cost_optimized_strategy ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_1_returns_opus ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_2_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::fixed_strategy_returns_sonnet_when_configured ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_default_iteration_1_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_override_detected_on_iteration_2 ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_no_override_when_hint_matches ... ok
[INFO] [stdout] test strategy::tests::plan_then_execute_iteration_5_returns_sonnet ... ok
[INFO] [stdout] test strategy::tests::escalate_no_distress_stays_haiku ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_steady_completions_return_haiku ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_errors_override_completions ... ok
[INFO] [stdout] test strategy::tests::cost_optimized_error_signals_return_opus ... ok
[INFO] [stdout] test tests::context_tests::test_initial_message_spec_resume ... ok
[INFO] [stdout] test tests::context_tests::test_initial_message_plan_resume ... ok
[INFO] [stdout] test tests::context_tests::test_initial_message_task_new ... ok
[INFO] [stdout] test tests::context_tests::test_system_prompt_includes_context ... ok
[INFO] [stdout] test tests::context_tests::test_truncate_over_limit ... ok
[INFO] [stdout] test tests::context_tests::test_truncate_unicode_safe ... ok
[INFO] [stdout] test tests::context_tests::test_truncate_under_limit ... ok
[INFO] [stdout] test tests::outcome_blocked_vs_noplan ... ok
[INFO] [stdout] test tests::outcome_complete_vs_failure ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_cursor_navigation ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_number_key_selects ... ok
[INFO] [stdout] test strategy::tests::escalate_override_detected_when_hint_differs ... ok
[INFO] [stdout] test ui::app::tests::choice_mode_typing_switches_to_freetext ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_home_end ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_left_right ... ok
[INFO] [stdout] test ui::app::tests::cursor_navigation_up_down ... ok
[INFO] [stdout] test ui::app::tests::freetext_ctrl_c_interrupts ... ok
[INFO] [stdout] test ui::app::tests::freetext_empty_enter_exits ... ok
[INFO] [stdout] test ui::app::tests::freetext_enter_submits ... ok
[INFO] [stdout] test ui::app::tests::freetext_shift_enter_inserts_newline ... ok
[INFO] [stdout] test ui::app::tests::freetext_typing_and_backspace ... ok
[INFO] [stdout] test ui::app::tests::pageup_pagedown_scroll_agent_during_input ... ok
[INFO] [stdout] test ui::event::tests::event_line_partial_eq ... ok
[INFO] [stdout] test strategy::tests::no_override_means_no_log_entry ... ok
[INFO] [stdout] test ui::state::tests::apply_handles_ui_event_event ... ok
[INFO] [stdout] test ui::state::tests::apply_updates_status_line ... ok
[INFO] [stdout] test ui::state::tests::events_ring_buffer_adjusts_scroll_offset ... ok
[INFO] [stdout] test ui::state::tests::events_ring_buffer_caps_at_max ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_down_resumes_auto_scroll ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_to_bottom ... ok
[INFO] [stdout] test ui::state::tests::events_scroll_up_from_auto_scroll ... ok
[INFO] [stdout] test ui::state::tests::explorer_scroll_bounds ... ok
[INFO] [stdout] test ui::state::tests::input_activation_and_deactivation ... ok
[INFO] [stdout] test strategy::tests::override_inserts_without_clobbering_existing_rows ... ok
[INFO] [stdout] test ui::tests::no_ui_flag_wins ... ok
[INFO] [stdout] test ui::tests::env_parser_defaults_to_auto_for_unknown ... ok
[INFO] [stdout] test ui::tests::non_tty_fallback_matrix ... ok
[INFO] [stdout] test ui::tests::prompt_calls_fallback_when_ui_not_running ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_all_fields ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_empty_is_noop ... ok
[INFO] [stdout] test strategy::tests::override_logged_to_model_overrides_table ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_validate_valid ... ok
[INFO] [stdout] test ui::theme::tests::dark_theme_uses_reset_background ... ok
[INFO] [stdout] test ui::theme::tests::event_category_style_returns_non_default_for_all_categories ... ok
[INFO] [stdout] test ui::theme::tests::event_task_color_override_applies ... ok
[INFO] [stdout] test ui::theme::tests::light_theme_uses_reset_background ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_hex_invalid ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_hex_valid ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_partial_apply ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_trims_whitespace ... ok
[INFO] [stdout] test ui::theme::tests::color_overrides_validate_invalid ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_named ... ok
[INFO] [stdout] test ui::theme::tests::parse_color_unknown_name ... ok
[INFO] [stdout] test ui::theme::tests::resolve_env_invalid_falls_through_to_config ... ok
[INFO] [stdout] test ui::theme::tests::resolve_falls_back_to_dark ... ok
[INFO] [stdout] test ui::theme::tests::resolve_env_overrides_config ... ok
[INFO] [stdout] test ui::theme::tests::resolve_uses_config_value ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_dark ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_light ... ok
[INFO] [stdout] test ui::theme::tests::theme_name_parse_invalid ... ok
[INFO] [stdout] test tests::outcome_variants_exist ... ok
[INFO] [stdout] test tests::context_tests::test_initial_message_spec_start ... ok
[INFO] [stdout] test tests::context_tests::test_initial_message_plan_start ... ok
[INFO] [stdout] test ui::app::tests::backspace_at_mid_cursor ... ok
[INFO] [stdout] test ui::app::tests::delete_key ... ok
[INFO] [stdout] test ui::state::tests::agent_text_is_capped_and_utf8_safe ... ok
[INFO] [stdout] test run_loop::tests::try_release_claim_resets_in_progress_task ... ok
[INFO] [stdout] test run_loop::tests::scoped_target_resolved_task_ignores_unrelated_pending_tasks ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail_empty ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_fail_absent ... ok
[INFO] [stdout] test verification::tests::test_parse_verify_pass ... ok
[INFO] [stdout] test tests::context_tests::test_gather_context_empty_project ... ok
[INFO] [stdout] test ui::view::tests::explorer_screen_renders_title ... ok
[INFO] [stdout] test tests::context_tests::test_gather_context_with_claude_md ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_core_panels ... ok
[INFO] [stdout] test tests::context_tests::test_gather_context_truncates_large_file ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_choices ... ok
[INFO] [stdout] test ui::view::tests::input_pane_does_not_panic_on_tiny_frame ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_freetext ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_inactive ... ok
[INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_releases_same_agent_claim ... ok
[INFO] [stdout] test tests::context_tests::test_gather_context_with_features ... ok
[INFO] [stdout] test ui::view::tests::dashboard_renders_tool_activity_in_left_column ... ok
[INFO] [stdout] test ui::view::tests::modal_renders_over_base_screen ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 538 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.76s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests ralph
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }`
[INFO] [stdout] 9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0
